查看原文
其他

Venn图的各种绘制方法----在线工具&R语言自动处理数据并绘图

红皇后学术 红皇后学术 2023-08-18

Venn图

重要的事要先说,关注公众号“红皇后学术”,后台回复“Venn”获取本文介绍在线工具的网址以及R语言绘图示例文件和完整代码。

Venn图通常用来展示不同样本间OTU的共有情况,在图中通常用一个圆形或椭圆形代表一个样本或一组样品,圆形的交叉位置代表不同样本间共有,重叠区域的数字表示对应的多个样本之间的共有的OTUs个数,未重叠区域表示各样本特有的OTUs,可以对2-5个(组)样本进行分析


VENNY

VENNY是一个在线的Venn图绘制工具,进入网站后,页面如下方所示,可以进行2-4个(组)样本的Venn分析

在左侧的List中填入响应的数据并更改List的名称即可,数据为该样本中检出的OTU的名称,每一个OTU单独一行。

具体的数据处理方式为,使用excel打开QIIME分析得到的OTU表格,选择样本列,按照从大到小排序,之后选择检出数目大于1的OTU名称,复制粘贴到响应的List位置即可。

填入数据后,右侧即时显示生成的图像。

可以在图像上方的工具栏对图像参数进行修改

点击图像中不同位置的数值,在左侧的Results一栏中就可以显示属于该区域的OTU名称。

鼠标右键点击图片,选择另存为图片,即可保存绘制结果。


JVenn


JVenn同样是绘制Venn图的在线工具,与VENNY的不同之处是,JVenn最多支持同时分析6个(组)样本,并且可以修改样本对应的颜色和进行简单的统计

进入JVenn的网页后,在右下方的List列表中输入响应的绘图文件,文件制作方法与VENNY一致,修改List的名称及其颜色。

在右侧就会实时显示绘制的图形。

在左侧上方的的Venn global configuration中可以修改图形参数

通常情况下Venn图使用Classic模式展示,有时也是用Edwarkds模式,结果如下。

JVenn支持对特定样本的突出显示,只需在其图像右下角对应的标签中,选择on即可。

与VENNY一样,点击图像中的数字,即可在下方显示该数据所包含的OTU信息。

对于6个样本,JVenn使用多边形表示不同的样本,而对于5个及一下样本,则使用常规的椭圆形或圆形展示

点击图片右上方的按钮,即可将绘制的结果保存到本地。


R语言“VennDiagram”包

除了使用在线工具之外,通常还使用R语言的“VennDiagram”包进行Venn图的绘制。

还是先介绍一个该包的图形参数。

venn.diagram(x, filename, height = 3000, width = 3000, resolution = 500, imagetype = "tiff", units = "px", compression = "lzw", na = "stop", main = NULL, sub = NULL, main.pos = c(0.5, 1.05), main.fontface = "plain",main.fontfamily = "serif", main.col = "black",main.cex = 1, main.just = c(0.5, 1), sub.pos = c(0.5,1.05), sub.fontface = "plain", sub.fontfamily = "serif", sub.col = "black", sub.cex = 1, sub.just = c(0.5, 1), category.names = names(x), force.unique = TRUE, print.mode = "raw", sigdigs = 3, direct.area = FALSE, area.vector = 0, hyper.test = FALSE, total.population = NULL, ...)

各参数意义:

  • X为绘制Venn图所需的数据向量list;

  • fielname为输出图像的名字;

  • height和width均为整数,规定输出图像的高和宽;

  • resolution规定数据图像的DPI分辨率;

  • imagetype规定输出图像的格式包括tiff、png和svg;

  • units为图像大小的单位;

  • compression为tiff图像应用的表达算法

  • na规定缺失的数值的处理方法包括none、stop和remove;

  • main为图像的标题;

  • sub为图像的副标题;

  • main.pos规定标题的位置;

  • main.fontface规定标题字体样式;

  • main.fontfamily规定标题字体的类型;

  • main.col规定标题字体的颜色;

  • main.cex为标题字体的大小;

  • main.just规定标题水平和垂体方向的对齐方式;

  • 所有sub的意义与main一样,只不过换成了副标题;

  • category.names定义venn图中不同圆圈的名称;

  • force.unique规定是否只应用输入数据中的unique元素进行绘图还是应用所有元素;

  • print.mod规定不同区域中数字的显示形式包括raw和percent;

除了这些参数之外,VennDiagram还包含一些通用的图形参数,例如lwd调整线宽、lty调整线型、col调整颜色等等,具体可以使用“?venn.diagram”查看帮助文档 (要先载入包啊!!)

VennDiagram绘制Venn需要一个list文件,相当于把在线分析工具的各样本数据合并到一个list文件中,可以在excel中手动制作绘图所需的文件,之后载入R中即可。

但是如果这样为啥还要用R画图呢,直接用在线工具不就好了😂😂!!!

这里隆重给大家带来使用R语言从OTU表格直接生成Venn绘图数据的完整代码!!!

示例中为4个样本的数据进行分析。

data <- read.table("otu_table.txt",header = TRUE,row.names = 1,sep = "\t")data <- ifelse(data > 0, rownames(data),NA)data <- as.data.frame(data)df <- list()for(i in 1:length(data)){a <- na.omit(data[,i])df <- c(df,list(a))}names(df) <- colnames(data)

之后直接进行图像的绘制。

ibrary(VennDiagram)library(RColorBrewer)venn.diagram(df,filename = "venn.png",height = 5400,width = 5400, resolution = 600,imagetype = "png",units = "px", lwd = 2,lty = 1,fill = brewer.pal(length(data),"Set2"),cex = 1.3, cat.cex = 2,alpha = 0.8,margin = 0.05,fontface = 2, cat.fontface = 2, print.mode = c("raw","percent"))

你以为这样就结束了么,上边的代码只是处理单个样本的,但由于Venn图分析样本数目的限制,很多时候我们都是需要绘制不同组样本间的Venn图

下面的代码连带分组数据的处理一步完成,示例数据共15个样本,分为3组,使用下方代码的前提是将样本的排序按照分组排列,并参考示例建立一个分组文件

data.g <- read.table("otu_table_group.txt",header = TRUE,row.names = 1,sep = "\t")group <- read.table("group.txt",header = FALSE,sep = "\t")
library(dplyr)g<-unique(group$V2)Gnum<-length(g)number <- group %>% group_by(V2) %>% count(V2)gf <- c()k <- 1for(i in 1:(Gnum)){ gf[k] <- sum(number[1:i,2]) k <- k+1}dg <- rownames(data.g)k <- 1for (i in 1:(Gnum)) {a <- as.data.frame(apply(data.g[,c(k:gf[i])],1,sum))dg <- cbind(dg,a)k <- gf[i] +1}dg <- dg[,-1]colnames(dg) <- g
dg <- ifelse(dg > 0, rownames(dg),NA)dg <- as.data.frame(dg)df <- list()for(i in 1:length(dg)){ a <- na.omit(dg[,i]) df <- c(df,list(a))}names(df) <- colnames(dg)
venn.diagram(df,filename = "venn_g.png",height = 5400,width = 5400, resolution = 600,imagetype = "png",units = "px", lwd = 2,lty = 1,fill = brewer.pal(length(dg),"Set2"),cex = 1.3, cat.cex = 2,alpha = 0.8,margin = 0.05,fontface = 2, cat.fontface = 2, print.mode = c("raw","percent"))

关注公众号“红皇后学术”,后台回复“Venn”获取本文介绍在线工具的网址以及R语言绘图示例文件和完整代码。

扩展阅读



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存